package algo3c3g5.componentes;

//(!)le agrego posibilidad de reparar?
//REGLA80Carcteres_0123456789012345678901234567890123456789012345678901234567890
public abstract class Componente {

	public enum TipoComponente {TANQUE_DE_COMBUSTIBLE, MOTOR, CARBURADOR, 
		CAJA_DE_CAMBIOS, DIFERENCIAL, TRANSMISION, LLANTAS, NEUMATICOS, 
		ESCAPE, CARROCERIA};
	
	private double vidaUtilOriginal;
	private double vidaUtilActual;
	private double masa;
	private double precio;
	private TipoComponente tipoComponente;
		
	public Componente(TipoComponente tipoComponente, double vidaUtil, 
			double masaEnKg, double precio) {
		
		this.vidaUtilOriginal = vidaUtil;
		this.vidaUtilActual = vidaUtil;
		this.masa = masaEnKg;
		this.precio = precio;
		this.tipoComponente = tipoComponente;
		
	}
	
	public TipoComponente getTipoComponente() {
		
		return this.tipoComponente;
		
	}
	
	public double getPrecio() {
		
		//(!)nunca puede ser vidaUtilOriginal <= 0
		//	hago un throw exception en el constructor?
		return ((this.vidaUtilActual / this.vidaUtilOriginal) * this.precio);
		
	}
	
	public double getMasa() {
		
		return this.masa;
		
	}
	
	public double getVidaUtil() {
		
		return this.vidaUtilActual;
		
	}
	
	protected void ajustarVidaUtil(double ajuste) {
	
		if ((this.vidaUtilActual + ajuste) > this.vidaUtilOriginal) {
			this.vidaUtilActual = this.vidaUtilOriginal;
		} else if ((this.vidaUtilActual + ajuste) < 0) {
			this.vidaUtilActual = 0;
		} else {
			this.vidaUtilActual = this.vidaUtilActual + ajuste;
		}
		
	}
	
	
	public boolean estaOperativo() {
		
		boolean operativo = true;
		if (this.vidaUtilActual == 0) operativo = false;
		return operativo;
		
	}
	
}